package com.etc.user.controller;

import com.etc.entity.PhoneCode;
import com.etc.entity.User;
import com.etc.service.PhoneCodeService;
import com.etc.service.UserService;
import com.etc.utils.CommonMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpSession;

/*
 * 文件名：com.etc.user.controller.LoginController
 * 描述：用户登录使用的
 * 作者：黄志鹏
 * 时间：2019/5/23 15:11
 */
@Controller
@RequestMapping("user.action")
public class UserLoginController {

    //注入一个userService对象
    @Autowired
    private UserService userService;

    //注入有关手机验证码操作的service对象
    @Autowired
    private PhoneCodeService phoneCodeService;

    /**
     * 登录界面跳转到注册界面的链接
     * @return
     */
    @RequestMapping("toRegister")
    public String toRegister() {
        return "user/register";
    }

    /**
     * 用户登录的控制器
     * @param userphone 用户手机号
     * @param userpassword 用户密码
     * @return 登录结果信息
     */
    @RequestMapping("doLogin")
    @ResponseBody
    public CommonMessage userDoLogin(String userphone, String userpassword , HttpSession session) {
        //创建一个返回值对象
        CommonMessage commonMessage = new CommonMessage();

        //根据手机号查询用户是否被注册
        User user = userService.getUserByUserPhone(userphone);

        //判断是否存在该用户
        if(user==null){

            //不存在该用户、设置返回值信息
            commonMessage.setMsg("该手机号还未注册，无法登录");
        }else {

            //存在该用户、判断该用户是否能够登录（判断用户状态）
            if (user.getUserstatus()==1){

                //账号被禁、设置返回信息
                commonMessage.setMsg("该账号已被禁用，请联系管理员");
            }else {

                //调用userService中的方法查询该用户
                User user2 = userService.getUserByUserPhoneAndUserPassword(userphone, userpassword);

                //判断是否存在该用户
                if (user2 != null) {

                    //存在该用户登录成功、设置返回值信息、并将用户信息存于session中
                    commonMessage.setMsg("登录成功");
                    session.setAttribute("user",user2);
                } else {

                    //不存在该用户、设置返回值信息
                    commonMessage.setMsg("账号或者密码有误、请重新登录");
                }
            }
        }

        return commonMessage;
    }

    /**
     * 跳转至重置密码界面
     * @return
     */
    @RequestMapping("toResetPassword")
    public String toResetPassword(){
        return "user/resetPassword";
    }

    /**
     * 重置密码界面校验是否存在该手机号用户的方法
     * @param userPhone 需要校验的手机号
     * @return 结果信息
     */
    @RequestMapping("resetPasswordGetUserByPhone")
    @ResponseBody
    public CommonMessage getUserByUserPhone(String userPhone) {

        //创建一个返回值对象
        CommonMessage commonMessage = new CommonMessage();
        //调用userService的方法查询数据
        User user = userService.getUserByUserPhone(userPhone);
        //设置返回值
        commonMessage.setMsg(user != null ? "存在该用户，可以进行密码重置" : "不存在该用户，请前去注册");

        return commonMessage;
    }

    /**
     * 注册发送验证码的控制器
     * 接收手机号，发送相应的验证码
     * @param userPhone 要发送验证码的手机号
     * @return 返回发送成功或者发送失败
     */
    @RequestMapping("resetPasswordSendSms")
    @ResponseBody
    public CommonMessage sendSms(String userPhone) {

        //创建返回的CommonMessage对象
        CommonMessage commonMessage = new CommonMessage();

        //查询数据库是否存在该手机号码的用户
        User user = userService.getUserByUserPhone(userPhone);

        if (user == null) {
            //存在该手机号码用户，不发送短信
            commonMessage.setMsg("没有存在该手机号用户，验证码发送失败");
        } else {
            //不存在该手机号用户，调用发短信的service发送短信
            phoneCodeService.sendCodeAndDeleteCode(userPhone);
            commonMessage.setMsg("验证码已发送，请注意查收");
        }
        return commonMessage;
    }

    @RequestMapping("resetPassword")
    @ResponseBody
    public CommonMessage resetPassword( String userpassword, String userphone, String code){

        //创建一个返回值对象
        CommonMessage commonMessage = new CommonMessage();

        //查询数据库中是否有该手机号的用户
        User user = userService.getUserByUserPhone(userphone);

        //判断用户表中是否存在该手机号码的用户
        if (user == null) {
            //如果不存在设置返回信息为重置失败，不存在该用户
            commonMessage.setMsg("重置失败，不存在该用户");
        } else {
            //查询phonecode表中是否存在当前的phone和code记录
            PhoneCode phoneCode = phoneCodeService.selectPhoneCodeByPhoneAndCode(userphone, code);

            if (phoneCode != null) {
                //phonecode表中存在当前的phone和code记录
                //调用service进行修改密码
               boolean isok= userService.updateUserPasswordByUserPhone(userphone,userpassword);


                //判断修改密码的返回值
                if (isok) {
                    //修改成功、设置返回信息
                    commonMessage.setMsg("重置成功");

                    //删除验证码信息
                    phoneCodeService.deletePhoneCode(userphone, code);

                } else {
                    //修改失败、设置返回信息
                    commonMessage.setMsg("重置失败");
                }
            } else {
                //phonecode表中不存在当前的phone和code记录、设置返回信息
                commonMessage.setMsg("重置失败");
            }
        }
        return commonMessage;
    }

    /**
     *用户退出的方法
     * @param session httpsession
     * @return 退出用户返回首页
     */
    @RequestMapping("exitUser")
    public String  exitUser(HttpSession session){
        session.removeAttribute("user");
        return "redirect:/user.action/home";
    }
}
